package com.linwen.excise.od;

import java.util.*;

/**
 * 信号传播过程中会出现一些误码，不同的数字表示不同的误码ID，取值范围为1~65535，用一个数组记录误码出现的情况，
 * 每个误码出现的次数代表误码频度，请找出记录中包含频度最高误码的最小子数组长度。
 * <p>
 * 输入描述
 * <p>
 * 误码总数目：取值范围为0~255，取值为0表示没有误码的情况。
 * 误码出现频率数组：误码ID范围为1~65535，数组长度为1~1000。
 * <p>
 * 输出描述
 * <p>
 * 包含频率最高的误码最小子数组长度
 * <p>
 * 示例1 输入输出示例仅供调试，后台判题数据一般不包含示例
 * <p>
 * 输入
 * <p>
 * 5
 * <p>
 * 1 2 2 4 1
 * <p>
 * 输出
 * <p>
 * 2
 */
public class _通信误码 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] ints = new int[n];
        for (int i = 0; i < n; i++) {
            ints[i] = scanner.nextInt();
        }
        // 找频率高的
        HashMap<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < n; i++) {
            if (map.containsKey(ints[i])) {
                map.put(ints[i], map.get(ints[i]) + 1);
            } else {
                map.put(ints[i], 1);
            }
        }
        int max = map.values().stream().max(Integer::compareTo).get();

        Set<Integer> max_num = new HashSet<>();
        for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
            if (entry.getValue() == max) {
                max_num.add(entry.getKey());
            }
        }
        //找到第一次和最后一次出现位置
        int result = n;
        for (Integer i : max_num) {
            int left = 0, right = n - 1;
            while (ints[left] != i) {
                left++;
            }
            while (ints[right] != i) {
                right--;
            }
            if (left <= right) {
                result = Math.min(result, right - left + 1);
            }
        }

        System.out.print(result);
    }
}
